﻿using System;
using System.ComponentModel;
namespace Kaesoft.Hospedaje.Entities
{
    public static class ObjectCopier
    {
        /// <summary> 
        /// Copia un objecto a otra instancia
        /// </summary> 
        /// <typeparam name="T">Tipo de objecto a copiar</typeparam> 
        /// <param name="source">Instancia del objecto a copiar</param> 
        /// <returns>Objecto copia</returns> 
        public static T Clone<T>(T source)
        {
            //Crea instancia
            object returnObject = Activator.CreateInstance<T>();
            //Obtiene las propiedades
            PropertyDescriptorCollection myProperties = TypeDescriptor.GetProperties(source);

            //Graba los valores
            for (int i = 0; i < myProperties.Count; i++)
            {
                myProperties[i].SetValue(returnObject, myProperties[i].GetValue(source));
            }
            //Retorna el nuevo objeto
            return (T)returnObject;  
        }
    } 
}